<?php

/**
 * Msa_ClientObject- Gestion des clients
 *
 * @package
 * @author Alexis Eric
 * @copyright Copyright (c) 2012 - Erra Prod
 * @version $1.0$
 * @access public
 */
class Msa_ClientObject extends Erra_Fields_Base_Object {

    function __construct($objectId, $buildArgs = null) {
        parent::__construct($objectId, $buildArgs);

        $civilite = Erra_Fields_ComboBox::create('civilite')
                ->fill(array('mr' => 'Monsieur', 'mme' => 'Madame'))
                ->setDescription('Civilité')
                ->setDatabaseType('VARCHAR', 8)
                ->prepend('<div class="user-infos">');
        if (!strlen($this->getBuildArgs())) {
            $civilite->prepend('<div class="user-infos" style="border-right:none;">');
        }


        $nom = Erra_Fields_Text::create('nom')
                ->setInAdminList(true)
                ->setDatabaseType('VARCHAR', 128)
                ->setDescription('Nom *');

        $search_name = $nom->createTextSearch()
                ->setOperator('LIKE %?')
                ->setDescription('Rechercher par nom du client');

        $prenom = Erra_Fields_Text::create('prenom')
                ->setInAdminList(true)
                ->setDatabaseType('VARCHAR', 128)
                ->setDescription('Prénom *');

        $email = Erra_Fields_Text::create('email')
                ->setDatabaseType('VARCHAR', 256)
                ->setDescription('Adresse e-mail *');

        $telephone_portable = Erra_Fields_Text::create('telephone_portable')
                ->setInAdminList(true)
                ->setDatabaseType('VARCHAR', 32)
                ->setDescription('Téléphone portable');

        $telephone_fixe = Erra_Fields_Text::create('telephone_fixe')
                ->setDatabaseType('VARCHAR', 32)
                ->setDescription('Téléphone fixe');

        $adresse = Erra_Fields_Text::create('adresse')
                ->setDatabaseType('TEXT')
                ->setDescription('Adresse');

        $code_postal = Erra_Fields_Text::create('code_postal')
                ->setDatabaseType('VARCHAR', 32)
                ->setInAdminList(true)
                ->setSize(6)
                ->setDescription('Code Postal');

        $ville = Erra_Fields_Text::create('ville')
                ->setSize(15)
                ->setDatabaseType('VARCHAR', 64)
                ->setDescription('Ville');

        $client_internet = Erra_Fields_Hidden::create('client_internet')
                ->setDatabaseType('TINYINT')
                ->setValue(0);


        $date_creation = Erra_Fields_Hidden::create('date_creation')
                ->setDatabaseType('INT', 16)
                ->setValue(time());

        $mot_de_passe = Erra_Fields_Hidden::create('mot_de_passe')
                ->setDatabaseType('TEXT');
        $mot_de_passe_confirm = Erra_Fields_Hidden::create('mot_de_passe_confirm')
                ->setDatabaseType('TEXT');

        $delete_clients = Erra_Fields_Callback::create('delete_clients')
                ->setActionName('Supprimer les clients séléctionnés');

        $this->addFields($search_name, $civilite, $nom, $prenom, $email, $adresse, $code_postal, $ville, $telephone_portable, $telephone_fixe, $mot_de_passe, $mot_de_passe_confirm, $client_internet, $date_creation);

        Msa_ExtraClientFieldObject::addExtraFields($this);
        $this->addExtraFieldsIds();
        $this->setAddText('Cliquez ici pour ajouter un client');

        $this->setDescription('Fiche client');
    }

    function postInit() {
        $opener = Erra_Fields_Hidden::create('opener')
                ->setDatabaseType('NONE')
                ->prepend('</div>');

        if (strlen($this->getBuildArgs())) {
            $this->setAttribute('style', 'width:625px');
            $opener->prepend('</div><div class="rdv-infos">' . $this->getRdvList() . '</div>');
        }
        $this->addFields($opener);
        $this->setAddText('Cliquez ici pour ajouter un client');
    }

    /**
     * getRdvList() - Affichage de la fiche client avec gestion des rendez-vous sur le calendrier (suite à une recherche avec autocomplete)
     * 
     * @return string
     */
    function getRdvList() {
        $res = '';
        $res .= '<div style="display:none;" id="delete-slot-dialog" title="Supprimer un rendez-vous client">                            
                    <p>Etes vous sur de vouloir supprimer ce rendez vous ?</p>
                 </div>';
        $rdvList = Erra_Core_DatabasePdo::SELECT('SELECT nom_agenda, event_id, slot_day, slot_start, prestation_name, duree, prix FROM msa_slotobject, msa_prestationobject, msa_agendaobject WHERE client_id=' . $this->getId() . ' AND msa_slotobject.prestation_id=msa_prestationobject.id AND event_type="presta" AND msa_agendaobject.id=msa_slotobject.agenda_id ORDER BY (slot_day+slot_start) DESC LIMIT 0, 10');
        if (Erra_Core_DatabasePdo::rowCount()) {
            $res .= '<strong>Liste des rendez vous</strong><br/>';
            while ($rdv = $rdvList->fetch()) {
                $rdv_class = (($rdv->slot_day + $rdv->slot_start) < time()) ? 'past-rdv-item' : 'future-rdv-item';
                $res .= '<div class="client-rdv-item ' . $rdv_class . '" id="client-rdv-item-' . $rdv->event_id . '">';
                $res .= 'Prestation : <strong>' . $rdv->prestation_name . '</strong><br/>';
                $res .= 'Prix : ' . $rdv->prix . ' €';
                $duree = time_to_str_duration($rdv->duree * 60);
                $res .= '   -   Durée : ' . $duree . '<br/>';
                $res .= 'Avec : ' . $rdv->nom_agenda . '<br/>';
                $res .= 'Le ' . date('d / m / Y', $rdv->slot_day);
                $res .= ' à ';
                $res .= time_to_str_hour($rdv->slot_start) . '<br/>';

                $res .= '   <span data-presta-id="' . $rdv->event_id . '" class="edit-slot-ajax pointer">';
                $res .= '       <img src="' . config_get('public_images') . '/icons/edit_element.png" /> Modifier';
                $res .= '   </span>';
                $res .= '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
                $res .= '   <span data-presta-id="' . $rdv->event_id . '" class="delete-slot-ajax pointer">';
                $res .= '       <img src="' . config_get('public_images') . '/icons/delete_element.png" /> Supprimer';
                $res .= '   </span>';
                $res .= '</div>';
            }
        } else {
            $res .= '<strong>Vous n\'avez aucun rendez-vous enregistré</strong><br/>';
        }
        return $res;
    }

    /**
     * ajaxForm() - Affichage de la fiche AJAX de création du client sue le calendrier
     * @return string
     */
    function ajaxForm() {
        $res = '';
        $res .= '<div id="create-ajax-user" title="Créér un nouveau client" class="ajax-form" style="display:none; z-index:1100;">';
        $res .= '   <div class="form">';
        $res .= '       <div class="loader"></div>';
        $res .= '       <input type="hidden" id="create_client_id" name="create_client_id">';
        $this->email->setDescription('Adresse e-mail');
        foreach ($this->getSubFields(true) as $aSubField) {
            $res .= $aSubField->edit();
        }
        $res .= '       </div>';
        $res .= '   </div>';
        $res .= '<center><input id="create-client-ajax" value="Créer la fiche client" class="erra-form-jqueryui-submit_button create-client-ajax"></center>';
        return $res;
    }

    /**
     * Affichage du formulaire d'enregistrement du client sur le front-office
     * 
     * @return string
     */
    function ajaxFormRegister() {
        $mot_de_passe = Erra_Fields_Password::create('mot_de_passe')
                ->setDescription('Mot de passe *');

        $mot_de_passe_confirm = Erra_Fields_Password::create('mot_de_passe_confirm')
                ->setDescription('Confirmation du mot de passe *');
        $this->addFields($mot_de_passe, $mot_de_passe_confirm);
        $res = '';
        $res .= '<div id="create-ajax-user" title="Enregistrez vous" class="ajax-form">';
        $res .= '   <div class="form">';
        $res .= '       <div class="loader"></div>';
        foreach ($this->getSubFields(true) as $aSubField) {
            $res .= $aSubField->edit();
        }
        $res .= '       </div>';
        $res .= '   </div>';
        $res .= '   <center><input id="create-ajax-user-submit" value="M\'enregistrer" class="erra-form-jqueryui-submit_button create-client-ajax"></center>';
        $res .= '</div>';
        return $res;
    }

    /**
     * ajaxFormEdit() - Formulaire d'edition de l'utilisateur sur le front office
     * 
     * @return string
     * 
     */
    function ajaxFormEdit() {
        $res = '';
        $this->removeSubFieldAt('opener');
        $res .= '<div id="edit-ajax-user" title="Modifier mon profil" class="ajax-form">';
        $res .= '   <div class="form">';
        $res .= '       <input type="hidden" name="object_id" value="' . $this->getObjectId() . '" />';
        foreach ($this->getSubFields(true) as $aSubField) {
            $aSubField->setValue(stripslashes($aSubField->getValue()));
            if ($aSubField->getHtmlId() == 'email' && strlen($aSubField->getValue())) {
                $email = Erra_Fields_Hidden::create('email')
                        ->setAttribute('readonly', 'readonly')
                        ->setValue($aSubField->getValue());
                $res .= 'E-mail : <strong>' . $aSubField->getValue() . '</strong>';
                $res .= $email->edit();
            } else {
                $res .= $aSubField->edit();
            }
        }
        $res .= '   </div>';
        $res .= '   <input id="edit-ajax-user-submit" value="Modifier mon profil" class="erra-form-jqueryui-submit_button edit-client-ajax">';
        $res .= '</div>';


        $res .= '<div id="edit-ajax-user-rdv">';
        $rdvList = Erra_Core_DatabasePdo::SELECT('SELECT nom_agenda, paypal, event_id, slot_day, slot_start, prestation_name, duree, prix, msa_locationobject.telephone as telephone, msa_locationobject.nom as shop_name, msa_locationobject.adresse as adresse FROM msa_slotobject, msa_prestationobject, msa_agendaobject, msa_locationobject WHERE client_id=' . $this->getId() . ' AND msa_slotobject.prestation_id=msa_prestationobject.id AND event_type="presta" AND msa_agendaobject.id=msa_slotobject.agenda_id AND msa_agendaobject.location=msa_locationobject.id ORDER BY (slot_day+slot_start) DESC limit 0, 10');
        if (Erra_Core_DatabasePdo::rowCount()) {
            $res .= '<strong>Liste des rendez vous</strong><br/>';
            while ($rdv = $rdvList->fetch()) {
                $rdv_class = (($rdv->slot_day + $rdv->slot_start) < time()) ? ' past-rdv-item' : 'future-rdv-item';
                $res .= '<div class="client-rdv-item ' . $rdv_class . '" id="client-rdv-item-' . $rdv->event_id . '">';
                $res .= 'Prestation : <strong>' . $rdv->prestation_name . '</strong><br/>';
                $res .= 'Prix : ' . $rdv->prix . ' €';
                $duree = time_to_str_duration($rdv->duree * 60);
                $res .= '  -   Durée : ' . $duree . '<br/>';
                $res .= 'Avec : ' . $rdv->nom_agenda . '<br/>';
                $res .= 'Le ' . date('d / m / Y', $rdv->slot_day);
                $res .= ' à ';
                $res .= time_to_str_hour($rdv->slot_start) . '<br/>';
                $res .= 'Reservé au <span class="live-tipsy pointer" title="' . addslashes($rdv->adresse) . '<br/>Pour annuler ou modifier votre rendez-vous, appelez au ' . $rdv->telephone . '">' . $rdv->shop_name . '</span>';
                if ($rdv->paypal == 1) {
                    $res .= 'Reglé avec PayPal <img src="' . config_get('public_images') . '/pictos/logo_mini_paypal.jpg">';
                }
                $res .= '</div>';
            }
        } else {
            $res .= '<strong>Vous n\'avez aucun rendez-vous enregistré</strong><br/>';
        }
        $res .= '</div>';
        return $res;
    }

    /**
     * postListInit() - On enlève le client avec l'id '0' de la liste (il est utilisé comme client par defaut pour assurer les contraintes
     * d'intégrité de la base et NE PEUT être supprimé
     */
    function postListInit() {
        $list = $this->getObjectDataArray();
        foreach ($list as $key => $item) {
            if ($item['id'] == 0) {
                unset($list[$key]);
            }
        }
        if (is_numeric(Erra_Fields_Search_PageNumber::$realItemCount['Msa_ClientObject'])) {
            Erra_Fields_Search_PageNumber::$realItemCount['Msa_ClientObject'] -= 1;
        }
        $this->setObjectDataArray($list);
    }

    /**
     * addExtraFieldsIds() - Ajoute les champs supplémentaires par défaut (en hidden pour l'instant, ils seront redeclarés plus tard)
     */
    function addExtraFieldsIds() {
        // Get data
        for ($i = 1; $i <= 5; $i++) {
            if ($this->getSubFieldAt('extra_field_' . $i) == null) {
                $extra_field = Erra_Fields_Hidden::create('extra_field_' . $i);
                $this->addField($extra_field);
            }
        }
    }

}